STM32 您所在的位置:网站首页 使用STM32CUBEMX 新HAL库TF卡模拟U盘不能格式化问题 STM32

STM32

2024-06-25 13:58| 来源: 网络整理| 查看: 265

一、工具

  1、硬件:STM32F103VET6单片机(HAL库)

  2、编译环境:Atollic TrueSTUDIO for STM32 9.3.0

  3、辅助工具:STM32CubeMX

二、工程创建

  1、打开调试接口

   2、选择时钟源

  3、打开USB功能

   4、选择USB中间件,配置USB为大容量存储类型,数据包的大小为4K(使用的的外部Flash一个扇区的大小为4Kbyte),其它默认

   5、根据原理图,需要配置PD6引脚输出为低电平

 

   6、配置系统时钟

   7、生成工程,注意要将堆改大一些

   从工程目录中可以可以看到多了一些关于USB的内容

 三、在USB文件中添加相关读写操作

  1、工程创建后,再添加外部Flash的初始化和读写程序,用于USB调用

   2、修改usbd_storage_if.c文件

  使用到的一些宏定义

/** @defgroup USBD_STORAGE_Private_Defines * @brief Private defines. * @{ */ #define STORAGE_LUN_NBR 1 /* 逻辑单元号,只有一个外部flash,设置为1 */ #define STORAGE_BLK_NBR 2048 /* 扇区的数量,外部flash的大小是8Mbyte,有128块,每块16个扇区,故128*16=2048个扇区 */ #define STORAGE_BLK_SIZ 4096 /* 每个扇区的大小,外部flash扇区的大小为4096byte */

   初始化

/* Private functions ---------------------------------------------------------*/ /** * @brief Initializes over USB FS IP * @param lun: * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_Init_FS(uint8_t lun) { /* USER CODE BEGIN 2 */ bsp_spi1_init(); return (USBD_OK); /* USER CODE END 2 */ }

  状态函数

/** * @brief . * @param lun: . * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_IsReady_FS(uint8_t lun) { /* USER CODE BEGIN 4 */ if(spi_flash_read_ID() == FLASH_ID) { return (USBD_OK); } else { return USBD_FAIL; } /* USER CODE END 4 */ }

  读函数

/** * @brief . * @param lun: . * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 6 */ /* 因为传进来的参数是扇区的地址和扇区的大小,在进行读的时候要转换成字节地址和字节大小 */ spi1_flash_read(blk_addr*STORAGE_BLK_SIZ, buf, blk_len*STORAGE_BLK_SIZ); return (USBD_OK); /* USER CODE END 6 */ }

  写函数

/** * @brief . * @param lun: . * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 7 */ /* 因为传进来的参数是扇区的地址和扇区的大小,在进行写的时候要转换成字节地址和字节大小,flash写之前要擦除 */ spi1_flash_sector_erase(blk_addr*STORAGE_BLK_SIZ); spi1_flash_write(blk_addr*STORAGE_BLK_SIZ, buf, blk_len*STORAGE_BLK_SIZ); return (USBD_OK); /* USER CODE END 7 */ } 四、运行程序

  1、第一次运行需要格式化虚拟出来的优盘

 

   

   2、格式化完成后就可以在自己的电脑上看到优盘

   4、创建一个文件测试读写是否正常,然后弹出优盘重新上电复位,查看文件是否还在

 

#endif



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有